##master-page:HelpTemplate ##master-date:Unknown-Date #format wiki #language en #Please change following line to BDF module name = BDF development manual = <> {{{ This manual is for developers. }}} == How to add a new module into BDF package == {{{#!wiki 1. Prepare you source codes and store it in a directory named "newmodule" . 2. Copy the directory "newmodule" into BDF source code directory $BDFHOME/source. #3. Copy a Makefile from any BDF module directory to "newmodule" to compile and link you program. 4. Append a line with the content "newmodule" into the file "$BDFHOME/database/program.dat". This file defines all available BDF modules which can be executed by BDF driver. 3. Edit the file "$BDFHOME/database/xianest.mh". Add your module name "newmodule "into variable PRGLIST. PRGLIST = dpdmrpt2 compass xuanyuan mcscf ... newmode 4. Edit the file "$BDFHOME/configure.in", add you module name "newmodule" into variable "xianlistf"(module)/"xianlistlib"(Library)/"xianlistprog"(program). For example: xianlistf = "class module compass sys_util ... newmodule" 5. Edit $BDFHOME/config/extralib.mh to add library for you new module and program. For example: ifeq ($(strip $(PROGNAME)),xianci) LEXTR = -lxianci_util -lmcmodule -lmcscf_util endif 6. Goto directory "$BDFHOME" and run command "autoconf" to generate new configure file. 7. Configure and make. If your program is linked correctly, you will have an executable file name "newmodule.x" in the directory $BDFHOME/bin. 8. add it to git control by "git add new module". Add tests and run all the tests. #After adding a module and generating a new configure file, you can configure BDF package and compile BDF to check #if your module is compiled correctly. ##[[How to add a new module into BDF package?]] }}} == Run all tests of BDF == In directory $BDFHOME/sbin, there is a shell script name "testall" can be used to run all BDF tests. If you use vi edit this file, you will see lines like {{{ #!/bin/bash ## May. 26, 2011 -BSUO- run all tests to check the program automatically export BDFHOME=~/bdfsrc #Anot/0.5.dev export BDF_TMPDIR=/tmp/$RANDOM ... }}} You need to modify "BDFHOME". Run this script will test all examples in "$BDFHOME/tests/input". The check files in "$BDFHOME/tests/check" will be used to compare test results. == Set up a BDF tests == It is better to set up your test input in BDF package. Usually, we will test BDF package day automatically. To set up a BDF test, you need the following steps. {{{ 1 Add some codes to output some important numbers in standard out. In $BDFHOME/sys_util/sysutil.F90, there is a subroutine name "checkdata" subroutine checkdata(c,n,m,idata,rdata,pname,dname) ! write check data into output for auto check implicit none character,intent(in) :: c ! data type, i for inter, r for real integer, intent(in) :: n ! number of data integer, intent(in) :: m ! number of significant digits to decimal digits, 1-9 integer, intent(in) :: idata(n) ! interger real*8, intent(in) :: rdata(n) ! real character*(*), intent(in) :: pname ! program name character*(*), intent(in) :: dname ! data name !------------------------------- end subroutine checkdata You can write integer or real numbers as a formatted form to standard out. The output looks link CHECKDATA:HF:ENERGY: -152.05437318 For example, you want to print a number "ene=-152.05437318", you can add line call checkdata("c",1,8,1,ene,"HF","ENERGY") You will have a line CHECKDATA:HF:ENERGY: -152.05437318 2 Now, you can write down a BDF input file named "test070.inp" and put it into the directory "$BDFHOME/tests/input". 3 You can generate the check file name "test070.check" and put it into the directory "$BDFHOME/tests/check". Support you have run BDF with input file test070.inp and redirect the output into a file name log. You can generate a check file via a sample command grep "CHECKDATA" log >test070.check }}} == Some interesting libraries == Some libraries were developed by Qiming Sun. {{{ libcint - Gaussian integrals. https://github.com/sunqm/libcint pyscf - Python SCF. http://sunqm.net/pyscf/overview.html }}} == BDF atomic orbital order == The atomic orbital order of BDF is sorted as fortran array {{{ AO(ncgto,nsph,nshell) }}} == Spherical GTO order == {{{ p - -1, 0, 1 d - -2, -1, 0, 1, +1 f - -3, -2, -1, 0, 1, +1, +2, +3 etc. }}} == BDF directory == === source === {{{ There are two kinds of directories in source. One type that contains a file named mail.F90, will be compiles into a executable file (BDF module). Another type that does not contain mail.F90, should be named as name_util. This type of directories will be compiled as libname.a that is share library. }}} === tests === {{{ input --- examples and test inputs check --- data used to check BDF codes failed --- failed tests molecule --- geometries of several molecules could be used to set up benchmark calculations. }}} == BDF easy input developing guide == [[ bdfeasyinputdevguid ]] == BDF daily test report == [[ bdfdailytest ]]